package packVistas;

import javax.swing.JDialog;
import javax.swing.JPanel;

import java.awt.BorderLayout;

import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import javax.swing.JTable;

import packLigaDeFutbol.GestorActuaciones;
import packLigaDeFutbol.GestorPartidos;
import packLigaDeFutbol.UtilControles;
import packLigaDeFutbol.comboValue;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.RowSpec;

import javax.swing.JScrollPane;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class GestionGoles extends JDialog {
	private JTextField tMinuto;
	private JComboBox<comboValue> cmbPartido, cmbJugador;
	private boolean cargando;
	private int idPartido;
	private JTable tMinJug;
	private int idArbitro;

	public GestionGoles(int pIdArbitro) {
		setModal(true);
		cargando = true;
		setTitle("Gestion de Goles");
		setBounds(100, 100, 352, 332);

		JPanel panel = new JPanel();
		getContentPane().add(panel, BorderLayout.CENTER);
		panel.setLayout(new FormLayout(new ColumnSpec[] {
				FormFactory.RELATED_GAP_COLSPEC,
				ColumnSpec.decode("185px:grow"),
				FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
				ColumnSpec.decode("center:113px:grow"),
				FormFactory.RELATED_GAP_COLSPEC,},
				new RowSpec[] {
				RowSpec.decode("38px"),
				FormFactory.LINE_GAP_ROWSPEC,
				RowSpec.decode("38px"),
				FormFactory.LINE_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				RowSpec.decode("38px"),
				FormFactory.LINE_GAP_ROWSPEC,
				RowSpec.decode("38px"),
				FormFactory.LINE_GAP_ROWSPEC,
				RowSpec.decode("63px:grow"),}));

		JLabel lblNewLabel_1 = new JLabel("Partido:");
		panel.add(lblNewLabel_1, "2, 1, left, fill");

		JButton btnNewButton = new JButton("Anotar Incidencia");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//se comprueba que el texto no est� vacio ni sea incorrecto
				if(tMinuto.getText() != "" && testNum()) {
					//insertamos la actuacion del gol en la base de datos
					GestorActuaciones.get().crearActuacion(
							idPartido, 												//id del partido
							((comboValue)cmbJugador.getSelectedItem()).getValor(), 	//id del jugador
							1,														//idtipo (1 es gol)
							Integer.parseInt(tMinuto.getText())						//minuto
							);

					cmbJugador.setSelectedIndex(0);	//reiniciamos el combo a su posicion inicial
					tMinuto.setText("");			//Eliminamos el texto del minuto
					cargarTabla();					//volvemos a cargar la tabla de los goles
				}
			}
		});
		panel.add(btnNewButton, "4, 1");

		cmbPartido = new JComboBox<comboValue>();
		
		cmbPartido.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//Si esta cargando el combo no hacemos nada
				if (!cargando) {
					JComboBox<comboValue> cb = (JComboBox<comboValue>)arg0.getSource(); //obtenemos el combo
					idPartido = ((comboValue)cb.getSelectedItem()).getValor();			//obtenemos el id del partido seleccionado

					//Cargamos el combo de los jugadores
					//como parametros le pasamos el combo de los jugadores y el resultset de todos los jugadores de un partido
					
					UtilControles.cargarCombo(cmbJugador, GestorPartidos.get().obtenerJugadoresDePartido(idPartido));
					
					//Cargamos la tabla con la lista de goles del partido
					cargarTabla();
				}
			}

		});
		panel.add(cmbPartido, "2, 3, fill, center");

		JButton btnNewButton_1 = new JButton("Borrar Incidencia");
		btnNewButton_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				
				//comprobamos que haya alguna fila seleccionada
				if (tMinJug.getSelectedRow() != -1){
					
				//con esto sabemos el ID de la fila que tenemos seleccionada:
				//--tminjug.getSelectedRow nos devuelve la fila seleccionada
				//--el 0 es porque al hacer la select el ID de la actuacion es el primer campo
				int idActuacion = Integer.parseInt(tMinJug.getModel().getValueAt(tMinJug.getSelectedRow(), 0).toString());
				
				//eliminamos la actuacion seleccionada
				GestorActuaciones.get().eliminarActuacion(idActuacion);
				
				//cargamos la tabla para que no aparezca la actuacion que hemos eliminado
				cargarTabla();
				}
			}
		});
		panel.add(btnNewButton_1, "4, 3");

		JLabel lblNewLabel = new JLabel("Minuto");
		panel.add(lblNewLabel, "2, 5, fill, fill");

		tMinuto = new JTextField();
		panel.add(tMinuto, "4, 5, left, center");
		tMinuto.setColumns(10);

		JLabel lblNewLabel_2 = new JLabel("Jugador:");
		panel.add(lblNewLabel_2, "2, 7, fill, fill");

		cmbJugador = new JComboBox<comboValue>();
		panel.add(cmbJugador, "2, 9, fill, center");

		JButton btnNewButton_3 = new JButton("Cerrar");
		btnNewButton_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});

		JScrollPane scrollPane = new JScrollPane();
		panel.add(scrollPane, "2, 11, fill, fill");

		tMinJug = new JTable();
		scrollPane.setViewportView(tMinJug);
		panel.add(btnNewButton_3, "4, 11");

		// al inicio se carga �ste y al cargarse �ste, se cargan los dem�s en funci�n del partido seleccionado.
		UtilControles.cargarCombo(cmbPartido, GestorPartidos.get().obtenerPartidosDeArbitro(pIdArbitro));
		cargando = false;
	}

	private void cargarTabla() {
		//cargamos la tabla de los goles
		//como parametros le pasamos la tabla y el resultset con los goles de un partido
		UtilControles.cargarTabla(tMinJug, GestorPartidos.get().mostrarGolesDePartido(idPartido));
	}

	private boolean testNum() {
		boolean is = true;
		int min = 0;
		try {
			min = Integer.parseInt(tMinuto.getText());
		}catch (NumberFormatException e) {
			is = false;
		}
		return is;
	}

}
